package cn.gson.boot.model.service;

import cn.gson.boot.model.dao.*;
import cn.gson.boot.model.mapper.*;
import cn.gson.boot.model.pojos.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;

@Service
@Transactional(rollbackFor = Exception.class)
public class HuiKuanService {
    @Autowired
    HuiKuanDao huiKuanDao;
    @Autowired
    HuiKuanMapper huiKuanMapper;
    @Autowired
    DinDanDao dinDanDao;
    @Autowired
    TuiHuoDao tuiHuoDao;
    @Autowired
    TuiKuanDao tuiKuanDao;
    @Autowired
    TuiKuanMapper tuiKuanMapper;

    @Autowired
    JiaoFuJiHuaXiangQingMapper jiaoFuJiHuaXiangQingMapper;
    @Autowired
    DingDanXiangQingMapper dingDanXiangQingMapper;


    //新建回款
    public void addHuiKuan(Huikuan huikuan) {
        Huikuan save = huiKuanDao.save(huikuan);
        //修改订单的回款金额
        dinDanDao.updatShiHuiKuan(huikuan.getDingdanByDdId().getDdHkmoney().doubleValue() + huikuan.getHkMoney().doubleValue(),huikuan.getDingdanByDdId().getDdId());
        Dingdan byId = dinDanDao.findById(huikuan.getDingdanByDdId().getDdId()).get();
        System.err.println("byId.getDingdanByDdId().getDdMoney():"+byId.getDdMoney());
        System.err.println("byId.getDingdanByDdId().getDdHkmoney():"+byId.getDdHkmoney());
        //如果订单总额等于订单回款金额的话， 并且 此订单下的交付计划状态为已交付的所有交付计划
        // 交计详情中的产品类型和产品数量和订单详情表里面的一致,就修改订单状态为已完成
        boolean hk = false;
        boolean jf = false;
        //判断订单应会金额是否等于已回金额
        if(byId.getDdMoney().equals(byId.getDdHkmoney())){
            hk = true;
        }

        //根据订单id找到订单详情
        List<Dingdanxiangqing> ddxq = dingDanXiangQingMapper.ckDingDanXiangQing(byId.getDdId());
        Integer jjxq = 0;
        for(int i=0;i<ddxq.size();i++){
            // 根据订单id和产品从表id找到 交付计划状态为已交付的交计详情产品的数量
            jjxq = jiaoFuJiHuaXiangQingMapper.selectJJXQandYJFByddId(byId.getDdId(),ddxq.get(i).getProductt().getProducttId());
            //判断此此产品在订单详情中的数量和在交计详情中的数量是否一致
            if(ddxq.get(i).getDdcpNum() == jjxq){
                jf = true;
            }
        }
        System.out.println("hk:"+hk);
        System.out.println("jf:"+jf);
        if(jf && hk){
            dinDanDao.updateDingDanZt("已完成",byId.getDdId());
        }

    }

    //查看所有回款
    public List<Huikuan> selectAllHuiKuan(String kName, String ddHao, String time,String empName) {
        return huiKuanMapper.selectAllHuiKuan(kName,ddHao,time,empName);
    }

    //新增退款
    public void addTuiKuan(Tuikuan tuikuan) {
        tuiKuanDao.save(tuikuan);
        //修改订单的回款金额
       // th.setThShimoney(new BigDecimal(tuikuan.getTuihuoByThId().getThShimoney().doubleValue()+tuikuan.getTkMoney().doubleValue()));
       /* th.setkH(tuikuan.getTuihuoByThId().getkH());
        System.err.println("kh:"+tuikuan.getTuihuoByThId().getkH());
        th.setDingdanByDdId(tuikuan.getTuihuoByThId().getDingdanByDdId());*/
        //如果实退金额等于订单回款金额的话，就修改退货单状态为结束
        tuiHuoDao.updatShiTuiKuan(tuikuan.getTkMoney().doubleValue(),tuikuan.getTuihuoByThId().getThId());
        Tuihuo th = tuiHuoDao.findById(tuikuan.getTuihuoByThId().getThId()).get();
        if(th.getThYingmoney().equals(th.getThShimoney())){
            tuiHuoDao.updateTuiHuoZt("结束",tuikuan.getTuihuoByThId().getThId());
        }
    }

    //查看所有退款
    public List<Tuikuan> selectAllTuiKaun(String kName, String thDanHao, String time,String empName) {
        return tuiKuanMapper.selectAllTuiKaun(kName,thDanHao,time,empName);
    }
}
